package jm.nj.demo12mian.demo04;

import java.io.*;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

/*
 * java.util.Properties集合  extends Hashtable implements Map
 *
 * 特点:
 *       Properties    1.Properties的泛型,健和值默认都是字符串类型
 *       Properties    2.Properties中有特有的方法,可以往集合中添加元素,获取集合中的元素,遍历集合
 *           Object  setProperty(String key , String value)  调用Hashtable  的方法put
 *           String  getProperty(String key)    键获值,相当map   的get
 *           Set<String> StringPropertyName()     返回键集  map   的keySet
 *       3.Properties集合是唯一一个和IO流结合的集合
 *               void  store (OutputStream out,String comments)
 *               void store(Writer writer,String comments)
 *           作用:把集合中保存的临时数据,持久化到文件中
 *           参数:
 *                   outputStream   字节流对象,不能写中文
 *                   Writer:字符流对象,可以写中文
 *                   comments  注释  不能使用中文
 *           void load(InputStream  inStream)
 *           void load(Reader reader)
 *           作用:可以把文件中保存的键值对,读取到集合中
 *           参数
 *               InputStream:字节流对象,不能读中文,会出现乱码
 *               Reader:字符流对象,可以读中文
 * */
public class DemoProperties {
    public static void main(String[] args) throws IOException {
        //demo01();
        //demo02();
        demo03();
    }

    /*
     * 使用Properties集合中的方法load,把存储键值对的文件进行读取,把读取到的数据保存到Properties集合中
     */
    private static void demo03() throws IOException {
        Properties prop = new Properties();
       // prop.load(new FileReader("D:\\prop.properties"));
        prop.load(new FileInputStream("D:\\prop.properties"));
        Set<String> set = prop.stringPropertyNames();
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            String key=it.next();
            String value = prop.getProperty(key);
            System.out.println(key+":"+value);
        }

    }

    /*
     * 使用Properties集合中的方法store,把集合中的临时数据,持久化到硬盘的文件中
     * */
    private static void demo02() throws IOException {
        Properties prop = new Properties();
        //put    string  string
        prop.setProperty("name", "zhangsan");
        prop.setProperty("age", "15");
        prop.setProperty("address", "北京");

      /*  FileWriter fw = new FileWriter("D:\\prop.properties");
        prop.store(fw,"save data");

        fw.close();*/

        FileOutputStream fos = new FileOutputStream("D:\\prop.properties");
        prop.store(fos, "中文");
        fos.close();
//FileOutputStream  不能写中文
    }

    /*
     * Properties的基本使用
     * 使用Properties集合存储数据,遍历集合
     */
    private static void demo01() {
        Properties prop = new Properties();
        //put    string  string
        prop.setProperty("name", "zhangsan");
        prop.setProperty("age", "15");
        prop.setProperty("address", "北京");

        Set<String> set = prop.stringPropertyNames();
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            String key = it.next();
            String value = prop.getProperty(key);
            System.out.println(key + ":" + value);
        }

    }
}
